+2006-07-17 Richard Hult <richard@imendio.com>
+
+ * gdk/quartz/gdkwindow-quartz.c:
+ (_gdk_windowing_window_destroy_foreign): Fix comment.
+ (gdk_window_set_title): Surround by release pool macros.
+ (gdk_window_get_type_hint): Fix return value.
+ (gdk_window_get_frame_extents): Implement.
+ (gdk_window_iconify): Use the release pool macros.
+ (gdk_window_deiconify): Likewise.
+ (_gdk_windowing_get_pointer): Implement.
+ (gdk_window_get_deskrelative_origin, gdk_window_get_root_origin):
+ Implement.
+
+ * gdk/quartz/gdkevents-quartz.c (create_crossing_event)
+ (create_scroll_event, convert_window_coordinates_to_root):
+ Set coordinates and root coordinates for crossing and scroll
+ events.
+
+ * gdk/quartz/gdkcursor-quartz.c (gdk_cursor_new_for_display):
+ Map some more cursors.
+
2006-07-17 Matthias Clasen <mclasen@redhat.com>
* gdk/gdkwindow.c (gdk_window_get_pointer): Add some more
+2006-07-17 Richard Hult <richard@imendio.com>
+
+ * gdk/quartz/gdkwindow-quartz.c:
+ (_gdk_windowing_window_destroy_foreign): Fix comment.
+ (gdk_window_set_title): Surround by release pool macros.
+ (gdk_window_get_type_hint): Fix return value.
+ (gdk_window_get_frame_extents): Implement.
+ (gdk_window_iconify): Use the release pool macros.
+ (gdk_window_deiconify): Likewise.
+ (_gdk_windowing_get_pointer): Implement.
+ (gdk_window_get_deskrelative_origin, gdk_window_get_root_origin):
+ Implement.
+
+ * gdk/quartz/gdkevents-quartz.c (create_crossing_event)
+ (create_scroll_event, convert_window_coordinates_to_root):
+ Set coordinates and root coordinates for crossing and scroll
+ events.
+
+ * gdk/quartz/gdkcursor-quartz.c (gdk_cursor_new_for_display):
+ Map some more cursors.
+
2006-07-17 Matthias Clasen <mclasen@redhat.com>
* gdk/gdkwindow.c (gdk_window_get_pointer): Add some more
case GDK_SB_V_DOUBLE_ARROW:
nscursor = [NSCursor resizeUpDownCursor];
break;
+ case GDK_SB_UP_ARROW:
+ case GDK_BASED_ARROW_UP:
+ case GDK_BOTTOM_TEE:
+ case GDK_TOP_SIDE:
+ nscursor = [NSCursor resizeUpCursor];
+ break;
+ case GDK_SB_DOWN_ARROW:
+ case GDK_BASED_ARROW_DOWN:
+ case GDK_TOP_TEE:
+ case GDK_BOTTOM_SIDE:
+ nscursor = [NSCursor resizeDownCursor];
+ break;
+ case GDK_SB_LEFT_ARROW:
+ case GDK_RIGHT_TEE:
+ case GDK_LEFT_SIDE:
+ nscursor = [NSCursor resizeLeftCursor];
+ break;
+ case GDK_SB_RIGHT_ARROW:
+ case GDK_LEFT_TEE:
+ case GDK_RIGHT_SIDE:
+ nscursor = [NSCursor resizeRightCursor];
+ break;
+ case GDK_TCROSS:
+ case GDK_CROSS:
+ case GDK_CROSSHAIR:
+ case GDK_DIAMOND_CROSS:
+ nscursor = [NSCursor crosshairCursor];
+ case GDK_HAND1:
+ case GDK_HAND2:
+ nscursor = [NSCursor pointingHandCursor];
+ break;
default:
g_warning ("Unsupported cursor type %d, using default", cursor_type);
nscursor = [NSCursor arrowCursor];
convert_window_coordinates_to_root (GdkWindow *window, gdouble x, gdouble y,
gdouble *x_root, gdouble *y_root)
{
- /* FIXME: Implement */
- *x_root = 0;
- *y_root = 0;
+ gint ox, oy;
+
+ *x_root = x;
+ *y_root = y;
+
+ if (gdk_window_get_origin (window, &ox, &oy))
+ {
+ *x_root += ox;
+ *y_root += oy;
+ }
}
static GdkEvent *
GdkNotifyType detail)
{
GdkEvent *event;
+ NSPoint point;
event = gdk_event_new (event_type);
event->crossing.window = window;
event->crossing.subwindow = NULL; /* FIXME */
event->crossing.time = get_event_time (nsevent);
- /* FIXME: x, y, x_root, y_root */
+
+ point = [nsevent locationInWindow];
+ event->crossing.x = point.x;
+ event->crossing.y = point.y;
+ convert_window_coordinates_to_root (window, event->crossing.x, event->crossing.y,
+ &event->crossing.x_root,
+ &event->crossing.y_root);
+
event->crossing.mode = mode;
event->crossing.detail = detail;
/* FIXME: focus */
create_scroll_event (GdkWindow *window, NSEvent *nsevent, GdkScrollDirection direction)
{
GdkEvent *event;
-
+ NSPoint point;
+
event = gdk_event_new (GDK_SCROLL);
event->scroll.window = window;
event->scroll.time = get_event_time (nsevent);
- /* FIXME event->x, event->y */
+
+ point = [nsevent locationInWindow];
+ event->scroll.x = point.x;
+ event->scroll.y = point.y;
+ convert_window_coordinates_to_root (window, event->scroll.x, event->scroll.y,
+ &event->scroll.x_root,
+ &event->scroll.y_root);
+
/* FIXME event->state; */
/* FIXME event->is_hint; */
event->scroll.direction = direction;
event->scroll.device = _gdk_display->core_pointer;
- /* FIXME: event->x_root, event->y_root */
return event;
}
void
_gdk_windowing_window_destroy_foreign (GdkWindow *window)
{
- /* FIXME: Implement */
+ /* Foreign windows aren't supported in OSX. */
}
static gboolean
GdkWindowObject *private = (GdkWindowObject *)window;
GdkWindowImplQuartz *impl;
- GDK_QUARTZ_ALLOC_POOL;
-
if (GDK_WINDOW_DESTROYED (window))
- {
- GDK_QUARTZ_RELEASE_POOL;
- return;
- }
+ return;
impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
if (height != -1)
impl->height = height;
+ GDK_QUARTZ_ALLOC_POOL;
+
if (impl->toplevel)
{
NSRect content_rect = NSMakeRect (private->x,
{
[impl->view setFrame:NSMakeRect (private->x, private->y,
impl->width, impl->height)];
-
+
/* FIXME: Maybe we should use setNeedsDisplayInRect instead */
[impl->view setNeedsDisplay:YES];
}
{
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
- /* FIXME: Implement */
- return FALSE;
+ return gdk_window_get_origin (window, x, y);
}
void
gint *x,
gint *y)
{
+ GdkRectangle rect;
+
g_return_if_fail (GDK_IS_WINDOW (window));
- /* FIXME: Implement */
+ rect.x = 0;
+ rect.y = 0;
+
+ gdk_window_get_frame_extents (window, &rect);
+
+ if (x)
+ *x = rect.x;
+
+ if (y)
+ *y = rect.y;
}
void
gint *y,
GdkModifierType *mask)
{
+ g_return_if_fail (display == _gdk_display);
+
+ *screen = _gdk_screen;
+ _gdk_windowing_window_get_pointer (_gdk_display, _gdk_root, x, y, mask);
}
GdkWindow *
if (impl->toplevel)
{
+ GDK_QUARTZ_ALLOC_POOL;
[impl->toplevel setTitle:[NSString stringWithUTF8String:title]];
+ GDK_QUARTZ_RELEASE_POOL;
}
}
gdk_window_get_type_hint (GdkWindow *window)
{
/* FIXME: Implement */
+ return GDK_WINDOW_TYPE_HINT_NORMAL;
}
void
gdk_window_get_frame_extents (GdkWindow *window,
GdkRectangle *rect)
{
- /* FIXME: Implement */
+ GdkWindowObject *private;
+ GdkWindow *toplevel;
+ GdkWindowImplQuartz *impl;
+ NSRect ns_rect;
+
+ g_return_if_fail (GDK_IS_WINDOW (window));
+ g_return_if_fail (rect != NULL);
+
+ private = GDK_WINDOW_OBJECT (window);
+
+ rect->x = 0;
+ rect->y = 0;
+ rect->width = 1;
+ rect->height = 1;
+
+ if (GDK_WINDOW_DESTROYED (window))
+ return;
+
+ toplevel = gdk_window_get_toplevel (window);
+ impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (toplevel)->impl);
+
+ ns_rect = [impl->toplevel frame];
+
+ rect->x = ns_rect.origin.x;
+ rect->y = _gdk_quartz_get_inverted_screen_y (ns_rect.origin.y + ns_rect.size.height);
+ rect->width = ns_rect.size.width;
+ rect->height = ns_rect.size.height;
}
void
}
gboolean
-gdk_window_get_decorations(GdkWindow *window,
- GdkWMDecoration *decorations)
+gdk_window_get_decorations (GdkWindow *window,
+ GdkWMDecoration *decorations)
{
/* FIXME: Implement */
return FALSE;
gdk_window_iconify (GdkWindow *window)
{
GdkWindowImplQuartz *impl;
- NSAutoreleasePool *pool;
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window))
return;
-
+
impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
if (!impl->toplevel)
return;
-
- pool = [[NSAutoreleasePool alloc] init];
+
+ GDK_QUARTZ_ALLOC_POOL;
[impl->toplevel miniaturize:nil];
- [pool release];
+ GDK_QUARTZ_RELEASE_POOL;
}
void
gdk_window_deiconify (GdkWindow *window)
{
GdkWindowImplQuartz *impl;
- NSAutoreleasePool *pool;
g_return_if_fail (GDK_IS_WINDOW (window));
if (!impl->toplevel)
return;
- pool = [[NSAutoreleasePool alloc] init];
+ GDK_QUARTZ_ALLOC_POOL;
[impl->toplevel deminiaturize:nil];
- [pool release];
+ GDK_QUARTZ_RELEASE_POOL;
}
void